package models

import (
	"context"
	"giv-vue-blog/global"
)

// FullTextModel 文章表
type FullTextModel struct {
	ID    string `json:"id" structs:"id"`      //es的id
	Key   string `json:"key" structs:"key"`    //文章关联的id
	Title string `json:"title" struct:"title"` //文章标题
	Slug  string `json:"slug" struct:"slug"`   //文章跳转地址
	Body  string `json:"body" struct:"body"`   //文章内容
}

func (FullTextModel) Index() string {
	return "full_text_index" //文章索引
}
func (FullTextModel) Mapping() string {
	return `
	{  
"settings":{
      "index":{
		"max_result_window":"1000"
}
},
     "mappings":{
                "properties":{
 "key":{
                                "type": "keyword"
                        },
                        "title":{
                                "type": "text"
                        },
 "slug":{
                                "type": "keyword"
                        },
"body":{
                                "type": "text"
                        }
 
                        }
                }
}
`
}

// IndexExists 判断索引是否存在
func (f FullTextModel) IndexExists() bool {

	//判断是否有索引
	exists, err := global.EsClient.IndexExists(f.Index()).Do(context.Background())
	if err != nil {
		global.Log.Error(err.Error())
		return exists
	}
	return exists
}

// CreateIndex 创建索引
func (f FullTextModel) CreateIndex() error {
	if f.IndexExists() {
		//有索引 删掉索引
		_ = f.RemoveIndex()
	}
	//无索引  创建索引
	createIndex, err := global.EsClient.CreateIndex(f.Index()).BodyString(f.Mapping()).Do(context.Background())
	if err != nil {
		global.Log.Error("创建索引失败")
		global.Log.Error(err.Error())
		return err
	}
	if !createIndex.Acknowledged {
		global.Log.Error("创建失败")
		return err
	}
	global.Log.Info("创建索引成功")
	return nil
}

// RemoveIndex 删除索引
func (f FullTextModel) RemoveIndex() error {
	global.Log.Info("索引存在,删除索引")
	//删除索引
	indexDelete, err := global.EsClient.DeleteIndex(f.Index()).Do(context.Background())
	if err != nil {
		global.Log.Error(err.Error())
		return err
	}
	if !indexDelete.Acknowledged {
		global.Log.Error("删除索引失败")
		return err
	}
	global.Log.Info("删除索引成功")
	return nil
}
